/*
 * Copyright (c) 2012 SUBSECRETARIA DEFENSORIA DEL ESPACIO PUBLICO - SDEP.
 * All Rights Reserved.
 * This software is the confidential and proprietary information of SDEP
 * Developed By CONSTULT-SOFT S.A, Development Team 2012.
 *
 */
package co.gov.medellin.sdep.sisdep.domain;

import java.io.Serializable;
import java.util.List;
import java.util.Map;

import javax.faces.model.DataModel;
import javax.faces.model.ListDataModel;

import co.gov.medellin.sdep.sisdep.common.AppConstants;
import co.gov.medellin.sdep.sisdep.gestion.exception.SolicitudException;
import co.gov.medellin.sdep.sisdep.model.Evento;
import co.gov.medellin.sdep.sisdep.model.EventoVistoBueno;
import co.gov.medellin.sdep.sisdep.regulacion.exception.EventoException;
import co.gov.medellin.sdep.sisdep.regulacion.exception.EventoVistoBuenoException;
import co.gov.medellin.sdep.sisdep.regulacion.exception.EventoVistoBuenoRuntimeException;
import co.gov.medellin.sdep.sisdep.regulacion.exception.SolicitudModificaException;
import co.gov.medellin.sdep.sisdep.regulacion.service.IEventoService;
import co.gov.medellin.sdep.sisdep.regulacion.service.IEventoVistoBuenoService;

/**
 * @author Usuario
 * 
 */
public class EventoVistoBuenoController extends SolicitudBaseController implements
		Serializable {

	/**
	 * generated serial version
	 */
	private static final long serialVersionUID = -3285110767384990403L;

	/**
	 * Constructor por defecto, inicializa los elemento basicos del Controlador
	 */
	public EventoVistoBuenoController() {
		this.eventoVistoBuenoListModel = new ListDataModel();
	}

	/** bean para el manejo del formulario de busqueda EventoVistoBueno */
	public EventoVistoBueno eventoVistoBuenoSearch = new EventoVistoBueno();

	/** Objeto contenedor del listado de EventoVistoBueno luego de una consulta. */
	private DataModel eventoVistoBuenoListModel;

	/** bean para el manejo del formulario de creacion/edicion. EventoVistoBueno */
	public EventoVistoBueno eventoVistoBueno = new EventoVistoBueno();

	/** bean para el manejo del formulario de creacion/edicion. Evento */
	public Evento evento = new Evento();

	/** instancia de servicio eventoService */
	private IEventoService eventoService;

	/** instancia de servicio eventoVistoBuenoService */
	private IEventoVistoBuenoService eventoVistoBuenoService;

	// --------------------------------------------------------------------
	// --- metodos para atender acciones init()
	// --------------------------------------------------------------------

	/**
	 * 
	 * @return String
	 * @throws SolicitudException 
	 * @throws SolicitudModificaException 
	 */
	public String initState() throws SolicitudException, EventoException, EventoVistoBuenoException {
		Map params = getExternalContext().getRequestParameterMap();
		Long solicitudId = new Long((String) params.get("solicitudId"));
		this.solicitudOrigenRedirectPage = (String) params.get("solicitudOrigenRedirectPage");
		this.solicitudDestinoRedirectPage = (String) params.get("solicitudDestinoRedirectPage");
		//cleanSearchValues();
		this.solicitud = getSolicitudService().get(solicitudId.longValue());
		this.evento = getEventoService().getEventoRelatedBy(solicitudId.longValue());
		System.out.println("Evento["+evento.getId() + "adf["+evento.getIdSolicitud()+"]");
		this.eventoVistoBueno = getEventoVistoBuenoService().get(this.evento.getId().longValue());		
		if(this.evento != null && this.eventoVistoBueno == null){
			this.eventoVistoBueno = new EventoVistoBueno();
			//cleanValues();
			this.eventoVistoBueno.setIdEvento(evento.getId());
			return solicitudOrigenRedirectPage;
		}
		return solicitudOrigenRedirectPage;
	}

	/**
	 * 
	 * @return String
	 */
	public String searchEventoVistoBuenoByKey() {
		String msg = "";
		try {
			List valores = null;
			valores = getEventoVistoBuenoService().load(1, 10,
					this.eventoVistoBuenoSearch);
			this.eventoVistoBuenoListModel.setWrappedData(valores);
		} catch (Exception e) {
			msg = e.getMessage();
			e.printStackTrace(System.err);
		}
		if (this.eventoVistoBuenoListModel.getWrappedData() == null) {
			msg = AppConstants.NO_RECORDS_FOUND;
		} else {
			if (((List) this.eventoVistoBuenoListModel.getWrappedData()).isEmpty()) {
				msg = AppConstants.NO_RECORDS_FOUND;
			}
		}
		((MessageModalWindowController) getBean("messageController"))
				.setSuccessMessage(msg, null, null);
		return AppConstants.EVENTOVISTOBUENO_SEARCH_VIEW;
	}

	public int searchEventoVistoBuenoByIdEvento(Long idEvento,IEventoVistoBuenoService service) {
		String msg = "";
		int intRdo=0;
		try {
			List valores = null;
			EventoVistoBueno evento = new EventoVistoBueno();
			evento.setIdEvento(idEvento);
			this.setEventoVistoBuenoService(service);
			valores = getEventoVistoBuenoService().loadByIdEvento(1, 10,
					evento);
			this.eventoVistoBuenoListModel.setWrappedData(valores);
			if(valores != null)
				intRdo = valores.size();
		} catch (Exception e) {
			msg = e.getMessage();
			e.printStackTrace(System.err);
		}
		if (this.eventoVistoBuenoListModel.getWrappedData() == null) {
			msg = AppConstants.NO_RECORDS_FOUND;
		} else {
			if (((List) this.eventoVistoBuenoListModel.getWrappedData()).isEmpty()) {
				msg = AppConstants.NO_RECORDS_FOUND;
			}
		}
		//((MessageModalWindowController) getBean("messageController"))
		//		.setSuccessMessage(msg, null, null);
		return intRdo;
	}
	
	
	/**
	 * 
	 * @return
	 */
	public String create() {
		String msg = AppConstants.DEFAULT_ERROR;
		try {
			if (this.eventoVistoBueno.getId().longValue() == 0L) {
				try{eventoVistoBueno.setIdPermisoAdicional(new Long(eventoVistoBueno.getIdPermisoAdicionalStr()));}catch(Exception e){eventoVistoBueno.setIdPermisoAdicional(new Long(0));}
				if(eventoVistoBueno.isReqPermisoAdicionalChk())
					eventoVistoBueno.setReqPermisoAdicional("S");
				else
					eventoVistoBueno.setReqPermisoAdicional("N");
				
				if(eventoVistoBueno.isTienePermisoAdicionalChk())
					eventoVistoBueno.setTienePermisoAdicional("S");
				else
					eventoVistoBueno.setTienePermisoAdicional("N");
				getEventoVistoBuenoService().insert(this.eventoVistoBueno);
				msg = AppConstants.SUCCESS_CREATE;
			}
		} catch (EventoVistoBuenoException e) {
			msg = e.getEndUserMessage();
			e.printStackTrace(System.err);
		} catch (EventoVistoBuenoRuntimeException e) {
			msg = e.getEndUserMessage();
			e.printStackTrace(System.err);
		}
		((MessageModalWindowController) getBean("messageController"))
				.setSuccessMessage("- Evento Visto Bueno " + msg, null, null);
		return this.solicitudDestinoRedirectPage;
		//return AppConstants.EVENTOVISTOBUENO_SEARCH_VIEW;
	}

	/**
	 * 
	 * @return
	 */
	public String update() {
		String msg = AppConstants.DEFAULT_ERROR;
		try {
			if (this.eventoVistoBueno.getId() == null) {
				try{eventoVistoBueno.setIdPermisoAdicional(new Long(eventoVistoBueno.getIdPermisoAdicionalStr()));}catch(Exception e){eventoVistoBueno.setIdPermisoAdicional(new Long(0));}
				if(eventoVistoBueno.isReqPermisoAdicionalChk())
					eventoVistoBueno.setReqPermisoAdicional("S");
				else
					eventoVistoBueno.setReqPermisoAdicional("N");
				
				if(eventoVistoBueno.isTienePermisoAdicionalChk())
					eventoVistoBueno.setTienePermisoAdicional("S");
				else
					eventoVistoBueno.setTienePermisoAdicional("N");
				getEventoVistoBuenoService().insert(this.eventoVistoBueno);
				msg = AppConstants.SUCCESS_CREATE;
			}
			if (this.eventoVistoBueno.getId() != null) {
				try{eventoVistoBueno.setIdPermisoAdicional(new Long(eventoVistoBueno.getIdPermisoAdicionalStr()));}catch(Exception e){eventoVistoBueno.setIdPermisoAdicional(new Long(0));}
				if(eventoVistoBueno.isReqPermisoAdicionalChk())
					eventoVistoBueno.setReqPermisoAdicional("S");
				else
					eventoVistoBueno.setReqPermisoAdicional("N");
				
				if(eventoVistoBueno.isTienePermisoAdicionalChk())
					eventoVistoBueno.setTienePermisoAdicional("S");
				else
					eventoVistoBueno.setTienePermisoAdicional("N");
				
				getEventoVistoBuenoService().update(this.eventoVistoBueno);
				msg = AppConstants.SUCCESS_UPDATE;
			}
		} catch (EventoVistoBuenoException e) {
			msg = e.getEndUserMessage();
			e.printStackTrace(System.err);
		} catch (EventoVistoBuenoRuntimeException e) {
			msg = e.getEndUserMessage();
			e.printStackTrace(System.err);
		}
		((MessageModalWindowController) getBean("messageController"))
				.setSuccessMessage("- Evento Visto Bueno " + msg, null, null);
		return this.solicitudDestinoRedirectPage;
		//return AppConstants.EVENTOVISTOBUENO_SEARCH_VIEW;
	}

	// --------------------------------------------------------------------
	// --- metodos para atender acciones end()
	// --------------------------------------------------------------------

	// --------------------------------------------------------------------
	// --- metodos para atender reglas de navegacion init()
	// --------------------------------------------------------------------

	/**
	 * 
	 */
	public String createEventoVistoBueno() {
		eventoVistoBueno = new EventoVistoBueno();
		eventoVistoBueno.setId(new Long(0L));
		eventoVistoBueno.setCodigo("");
		//eventoVistoBueno.setValor("");
		//eventoVistoBueno.setActivo("N");
		this.solicitudDestinoRedirectPage = AppConstants.EVENTOVISTOBUENO_SEARCH_VIEW;
		return AppConstants.EVENTOVISTOBUENO_CREATE_VIEW;
	}

	/**
	 * 
	 * @return
	 */
	public String updateEventoVistoBueno() {
		Map params = getExternalContext().getRequestParameterMap();
		String eventoVistoBuenoDataIndex = (String) params
				.get("eventoVistoBuenoDataIndex");
		if(eventoVistoBuenoDataIndex == null)
			eventoVistoBuenoDataIndex = "0";
		this.eventoVistoBueno = (EventoVistoBueno) ((List) this.eventoVistoBuenoListModel
				.getWrappedData())
				.get(Integer.parseInt(eventoVistoBuenoDataIndex));
		this.solicitudDestinoRedirectPage = AppConstants.EVENTOVISTOBUENO_SEARCH_VIEW;
		this.solicitudDestinoRedirectPage = AppConstants.EVENTOVISTOBUENO_SEARCH_VIEW;
		return AppConstants.EVENTOVISTOBUENO_UPDATE_VIEW;
	}

	/**
	 * 
	 * @return
	 */
	public String cancelEventoVistoBueno() {
		return AppConstants.EVENTOVISTOBUENO_SEARCH_VIEW;
	}
	/**
	 * 
	 * @return
	 */
	public String cancelEventoVistoBuenoOpcion() {
		return AppConstants.EVENTOVISTOBUENO_MENU_VIEW;
	}	

	// --------------------------------------------------------------------
	// --- metodos para atender reglas de navegacion end()
	// --------------------------------------------------------------------

	// --------------------------------------------------------------------
	// --- getters and setters init()
	// --------------------------------------------------------------------

	/**
	 * 
	 */
	public EventoVistoBueno getEventoVistoBuenoSearch() {
		return eventoVistoBuenoSearch;
	}

	/**
	 * 
	 * @param eventoVistoBuenoSearch
	 */
	public void seteventoVistoBuenoSearch(EventoVistoBueno eventoVistoBuenoSearch) {
		this.eventoVistoBuenoSearch = eventoVistoBuenoSearch;
	}

	/**
	 * 
	 * @return
	 */
	public DataModel geteventoVistoBuenoListModel() {
		return eventoVistoBuenoListModel;
	}

	/**
	 * 
	 * @param eventoVistoBuenoListModel
	 */
	public void seteventoVistoBuenoListModel(DataModel eventoVistoBuenoListModel) {
		this.eventoVistoBuenoListModel = eventoVistoBuenoListModel;
	}

	/**
	 * 
	 * @return
	 */
	public EventoVistoBueno getEventoVistoBueno() {
		return eventoVistoBueno;
	}

	/**
	 * 
	 * @param eventoVistoBueno
	 */
	public void seteventoVistoBueno(EventoVistoBueno eventoVistoBueno) {
		this.eventoVistoBueno = eventoVistoBueno;
	}

	/**
	 * obtencion del servicio eventoVistoBuenoService
	 * 
	 * @return
	 */
	public IEventoVistoBuenoService getEventoVistoBuenoService() {
		return eventoVistoBuenoService;
	}

	/**
	 * establecimiento del servicio eventoVistoBuenoService, la inyeccion de la
	 * dependencia la cubre SpringFramework
	 * 
	 * @param eventoVistoBuenoService
	 */
	public void setEventoVistoBuenoService(
			IEventoVistoBuenoService eventoVistoBuenoService) {
		this.eventoVistoBuenoService = eventoVistoBuenoService;
	}

	public IEventoService getEventoService() {
		return eventoService;
	}

	public void setEventoService(IEventoService eventoService) {
		this.eventoService = eventoService;
	}
	
	// --------------------------------------------------------------------
	// --- getters and setters end()
	// --------------------------------------------------------------------

}
